# -*- coding: utf-8 -*-
"""
@Time    : 2024/9/12 19:38 
@Author  : ZhangShenao 
@File    : 4.平面上的点.py 
@Desc    : 平面上的点
"""
from math import sqrt


class Point:
    """平面上的点"""

    def __init__(self, x: float = 0.0, y: float = 0.0):
        """
        构造函数
        :param x: X坐标
        :param y: Y坐标
        """

        # 初始化坐标
        self._x = x
        self._y = y

    def move_to(self, x: float, y: float) -> None:
        """
        移动到指定位置
        :param x: 新位置的X坐标
        :param y: 新位置的Y坐标
        """

        # 移动坐标
        self._x = x
        self._y = y

    def move_by(self, x: float, y: float) -> None:
        """
        移动指定距离
        :param x: X坐标移动的距离
        :param y: Y坐标移动的距离
        """

        self._x += x
        self._y += y

    def distance_from(self, p) -> float:
        """
        计算到另一个点的距离
        :param p: 另一个点
        :return: 两点之间的距离
        """

        dx = self._x - p._x
        dy = self._y - p._y
        return sqrt(dx ** 2 + dy ** 2)

    def __str__(self):
        """打印坐标位置"""
        return f"({self._x}, {self._y})"


if __name__ == '__main__':
    p1 = Point(1, 2)
    p2 = Point(3, 4)

    p1.move_to(4, 5)
    p1.move_by(2, 6)

    print(f"p1: {p1}")
    print(f"p2: {p2}")

    print(f"p1到p2的距离: {p1.distance_from(p2)}")
